package com.algorithm;

/**
 * 矩阵置零
 */
public class SetMatrixZeroes {

    public static void setZeroes(int[][] matrix) {
        boolean firstCol=false;
        boolean firstRow=false;
        //将第一列有0的标为true
        for (int i = 0; i < matrix.length; i++) {
            if (matrix[i][0]==0){
                firstCol=true;
                break;
            }
        }
        //将第一行有0的标为true
        for (int i = 0; i < matrix[0].length; i++) {
            if (matrix[0][i]==0){
                firstRow=true;
                break;
            }
        }
        //将所有为0的第一列和第一行设置成0
        for (int i=1;i<=matrix.length-1;i++){
            for (int j=1;j<=matrix[0].length-1;j++){
                if (matrix[i][j]==0){
                    matrix[i][0]=0;
                    matrix[0][j]=0;
                }
            }
        }
        //遍历第一列将所有为0的行全部设置为0
        for (int i=1;i<=matrix.length-1;i++){
            if (matrix[i][0]==0){
                for (int j=1;j<=matrix[0].length-1;j++){
                    matrix[i][j]=0;
                }
            }
        }
        //遍历第一行将所有为0的列全部设置为0
        for (int i=1;i<=matrix[0].length-1;i++){
            if (matrix[0][i]==0){
                for (int j=1;j<=matrix.length-1;j++){
                    matrix[j][i]=0;
                }
            }
        }
        //判断第一列是否有0，如果有，将第一列全部设置0
        if (firstCol){
            for (int i=0;i<=matrix.length-1;i++){
                matrix[i][0]=0;
            }
        }
        //判断第一行是否有0，如果有，将第一行全部设置0
        if (firstRow){
            for (int i=0;i<=matrix[0].length-1;i++){
                matrix[0][i]=0;
            }
        }
    }

    public static void main(String[] args) {
//        int[][] matrix = new int[][]{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}};
//        int[][] matrix = new int[][]{{0,1,2,0},{3,4,5,2},{1,3,1,5}};
//        int[][] matrix = new int[][]{{0,1}};
        int[][] matrix = new int[][]{{1},{0}};
        setZeroes(matrix);
        System.out.println(matrix);
    }
}
